Khái niệm chung: Ngoài khả năng xuất dữ liệu cố định theo kiểu string hay kiểu số, ta có thể xuất dữ liệu theo một danh mục nào đó Để minh 

Một phần của tài liệu Tài liệu CHƯƠNG 1: MATLAB CƠ BẢN §1. CÁC TOÁN TỬ CƠ BẢN CỦA MATLAB  doc (Trang 34 - 39)

string hay kiểu số, ta có thể xuất dữ liệu theo một danh mục nào đó. Để minh  hoạ, ta tạo file ct1_41.m như sau: 

 

    f = input(ʹNhap nhiet do: ʹ);      r = f + 459.7; 

    c = (f ‐ 32)*5/9;      k = c + 273.15; 

    choice = input([ʹNhap 1 cho Rankieʹ, ʹ2 cho Celciusʹ, ʹ3 cho Kelvin: ʹ]);      if choice = = 1 

         fprintf(1, ʹNhiet do (do R) la: %g\nʹ, r);      elseif choice = = 2 

         fprintf(2, ʹNhiet do (do C) la: %g\nʹ, c);      elseif choice = = 3 

         fprintf(2, ʹNhiet do (do C) la: %g\nʹ, c);      end 

 

Từ cửa sổ lệnh, nhập lệnh ct1_41 thì MATLAB sẽ hỏi nhiệt độ và đích quy đổi  rồi hiển thị kết quả. Tuy nhiên công cụ GUI của MATLAB cho phép ta thực  hiện việc lựa chọn thuận lợi hơn. Ta có thể chọn một trong 4 phương xuất dữ  liệu sau đây:    ‐ dùng popupmenu    ‐ dùng list box    ‐ dùng radio button    ‐ dùng check box  b. Dùng popupmenu: Ta tạo ra giao diện như sau:   

35

         

 

Các lệnh thực hiện công việc trên (ct1_42.m) là:   

set(gcf, ʹDefaultUicontrolUnitʹ,  ʹNormalizedʹ) 

frame_1 = uicontrol(gcf, ʹStyleʹ,  ʹFrameʹ,...         ʹPositionʹ,   [0.1 0.1  0.8 0.3]); 

frame_2 = uicontrol(gcf, ʹStyleʹ,   ʹFrameʹ,...        ʹPositionʹ,   [0.1 0.6  0.8 0.3]); 

set(frame_1, ʹBackgroundColorʹ,  [0.5 0.5 0.5]); 

set(frame_2, ʹBackgroundColorʹ  ,[0.5 0.5 0.5]); 

text_f = uicontrol(gcf,ʹStyleʹ,  ʹTextʹ,...         ʹStringʹ,   ʹFahrenheit: ʹ,...         ʹPositionʹ,   [0.3 0.7 0.2 0.05],...         ʹHorizontalAlignmentʹ,  ʹLeftʹ); 

edit_f = uicontrol(gcf,ʹStyleʹ,   ʹEditʹ,...         ʹStringʹ,...ʹ168.0ʹ,...        ʹPositionʹ,  [0.6 0.7 0.1 0.05 ],...        ʹHorizontalAlignmentʹ,  ʹRightʹ,...        ʹCallbackʹ,  ʹct1_38ʹ);  popup_c = uicontrol(gcf,...        ʹStyleʹ,ʹPopupmenuʹ,...             ʹStringʹ,ʹRankine|Celcius|Kelvinʹ,...            ʹValueʹ,2,...             ʹPositionʹ,[0.3 0.3 0.2 0.05],...            ʹCallbackʹ,ʹct1_43; ct1_45ʹ); 

36

      ʹStringʹ,   ʹ100.0ʹ,... 

      ʹPositionʹ,   [0.6 0.3 0.1 0.05],...        ʹHorizontalAlignmentʹ,   ʹLeftʹ); 

slider_f = uicontrol(gcf, ʹStyleʹ,   ʹSliderʹ,... 

      ʹMinʹ,  32.0, ʹMaxʹ,  212.0,...         ʹValueʹ,   68.0,... 

      ʹPositionʹ,   [0.6 0.8 0.2 0.05],...            ʹCallbackʹ, ʹct1_39; ct1_45ʹ); 

 

Khi kích chuột vào Popupmenu , có ba khả năng chọn lựa sẽ xuất hiện. Tiếp  tục nháy chuột vào một trong 3 khả năng đó , Popupmenu biến mất chỉ còn lại  đơn vị  được chọn. Khi dùng chuột kéo thanh trượt  ở frame phía trên, ta có  được giá trị quy đổi sang đơn vị được chọn hiển thị ở phía dưới. Trong đoạn  mã trên, giá trị ‘Value’ đặt sẵn là 2. Khi Callback gọi ct1_43.m: 

 

  choice = get(popup_c,Value);    (adsbygoogle = window.adsbygoogle || []).push({});

thì giá trị của biến choice  được  đưa tới ‘Value’. Sau  đó Callback gọi tiếp 

ct1_45.m để xem kết quả giữ trong choice. File ct1_45.m như sau:      f = get(edit_f, ʹStringʹ);    f = str2num(f);   r = f  +  459.7;    c = (f ‐ 32)*5/9;    k = c + 273.15; 

 choice = input([ʹNhap 1 cho Rankieʹ, ʹ2 cho Celciusʹ, ʹ3 cho Kelvin: ʹ]);   if choice = = 1     t = r;   elseif choice = = 2     t = c;  elseif choice = = 3      t = k   end   t = num2str(t);   set(text_c2, ʹStringʹ,t);   

37Bằng  cách  thay  ‘Popupmenu’  bằng  ‘Radiobutton’  uicontrol  ta  có  Bằng  cách  thay  ‘Popupmenu’  bằng  ‘Radiobutton’  uicontrol  ta  có  phương án Radiobutton. Giao diện sẽ có dạng:                  Các lệnh thực hiện công việc này (ct1_46.m) là:   

set(gcf, ʹDefaultUicontrolUnitʹ,   ʹNormalizedʹ) 

frame_1 = uicontrol(gcf, ʹStyleʹ, ʹFrameʹ, ʹPositionʹ,  [0.1 0.1  0.8 0.3]); 

frame_2 = uicontrol(gcf, ʹStyleʹ, ʹFrameʹ, ʹPositionʹ,  [0.1 0.6  0.8 0.3]); 

set(frame_1,ʹBackgroundColorʹ,  [0.5 0.5 0.5]); 

set(frame_2,ʹBackgroundColorʹ,  [0.5 0.5 0.5]); 

text_f = uicontrol(gcf, ʹStyleʹ,  ʹTextʹ, ʹStringʹ,  ʹFahrenheit: ʹ,ʹPositionʹ,...         [0.3 0.7 0.2 0.05], ʹHorizontalAlignmentʹ, ʹLeftʹ); 

edit_f = uicontrol(gcf, ʹStyleʹ, ʹEditʹ, ʹStringʹ,ʹ168.0ʹ, ʹPositionʹ,...        [0.6 0.7 0.1 0.05 ], ʹHorizontalAlignmentʹ,...         ʹRightʹ, ʹCallbackʹ,ʹct1_41ʹ); 

strings = [ʹRankineʹ; ʹCelciusʹ; ʹKelvineʹ]; 

show   = [    0;        1;         0]; 

ys     = [    3;        2;         1]*0.075 + 0.075; 

for i = 1:3 

    radio_c(i) = uicontrol(gcf,... 

38              ʹStringʹ,   strings(i),...                ʹStringʹ,   strings(i),...                ʹValueʹ,   show(i),...         ʹPositionʹ,  [0.3 ys(i)  0.2 0.05],...                ʹCallbackʹ,  ʹct1_47; ct1_45ʹ);  end 

text_c2= uicontrol(gcf, ʹStyleʹ, ʹTextʹ, ʹStringʹ,ʹ100.0ʹ, ʹPositionʹ,...         [0.6 0.3 0.1 0.05], ʹHorizontalAlignmentʹ, ʹLeftʹ); 

slider_f = uicontrol(gcf, ʹStyleʹ, ʹSliderʹ, ʹMinʹ,32.0, ʹMaxʹ, 212.0,...        ʹValueʹ, 68.0, ʹPositionʹ, [0.6 0.8 0.2 0.05],...              ʹCallbackʹ, ʹct1_39; ct1_45ʹ);    File ct1_47.m:    for i = 1:3      if gcbo = = radio_c(i)      choice = i;          set(radio_c(i), ʹValueʹ, 1);     elseif          set(radio_c(i), ʹValueʹ, 0);    end;  end;    Đoạn lệnh trên là một vòng lặp, so sánh số (handle) Callback thu được (giá trị  do hàm gcbo trả về) với handle của mỗi nút. Nút nào có số trùng sẽ  được  đóng (turn on, ‘Value’ = 1) và nút nào khác số sẽ bị ngắt (turn off,’Value’ = 0).  Cuối cùng Callback gọi ct1_45.m để thực hiện việc tính quy đổi được chọn và  hiển thị kết quả. Điểm khác duy nhất là khi chọn, Popupmenu chỉ chứa một  phần tử thì radiobutton có thể đồng thời chứa nhiều phần tử.  

39   

 

Các mã tạo ra giao diện trên (ct1_48.m) là:   

set(gcf, ʹDefaultUicontrolUnitʹ, ʹNormalizedʹ) 

frame_1 = uicontrol(gcf, ʹStyleʹ, ʹFrameʹ, ʹPositionʹ, [0.1 0.1  0.8 0.3]); 

frame_2 = uicontrol(gcf, ʹStyleʹ, ʹFrameʹ, ʹPositionʹ, [0.1 0.6  0.8 0.3]); 

set(frame_1, ʹBackgroundColorʹ, [0.5 0.5 0.5]); 

set(frame_2, ʹBackgroundColorʹ, [0.5 0.5 0.5]); 

text_f = uicontrol(gcf, ʹStyleʹ, ʹTextʹ, ʹStringʹ, ʹFahrenheit: ʹ, ʹPositionʹ,...         [0.3 0.7 0.2 0.05], ʹHorizontalAlignmentʹ, ʹLeftʹ); 

edit_f = uicontrol(gcf, ʹStyleʹ, ʹEditʹ, ʹStringʹ, ʹ168.0ʹ, ʹPositionʹ,...         [0.6 0.7 0.1 0.05 ], ʹHorizontalAlignmentʹ,...         ʹRightʹ, ʹCallbackʹ, ʹct1_38ʹ);  listbox_c = uicontrol(gcf,...        ʹStyleʹ, ʹListboxʹ,...        ʹStringʹ, ʹRankine|Celcius|Kelvinʹ,...        ʹValueʹ, 2,...        ʹPositionʹ, [0.3 0.3 0.2 0.05],...        ʹCallbackʹ, ʹct1_49;ct1_45ʹ); 

text_c2 =  uicontrol(gcf, ʹStyleʹ, ʹTextʹ, ʹStringʹ, ʹ100.0ʹ, ʹPositionʹ,...         [0.6 0.3 0.1 0.05], ʹHorizontalAlignmentʹ, ʹLeftʹ);  (adsbygoogle = window.adsbygoogle || []).push({});

slider_f = uicontrol(gcf, ʹStyleʹ, ʹSliderʹ, ʹMinʹ,32.0, ʹMaxʹ, 212.0,...        ʹValueʹ, 68.0, ʹPositionʹ, [0.6 0.8 0.2 0.05],... 

            ʹCallbackʹ, ʹct1_39; ct1_45ʹ); 

Một phần của tài liệu Tài liệu CHƯƠNG 1: MATLAB CƠ BẢN §1. CÁC TOÁN TỬ CƠ BẢN CỦA MATLAB  doc (Trang 34 - 39)